home *** CD-ROM | disk | FTP | other *** search
- package org.apache.xalan.xslt;
-
- import java.io.PrintWriter;
- import java.io.StringWriter;
- import java.util.Stack;
- import org.w3c.dom.Element;
- import org.w3c.dom.Node;
- import org.w3c.dom.Text;
-
- class XSLTEngineImpl$StackGuard {
- // $FF: synthetic field
- private final XSLTEngineImpl this$0;
- Node m_xslRule;
- Node m_sourceXML;
- Stack stack;
-
- public XSLTEngineImpl$StackGuard(XSLTEngineImpl var1) {
- this.this$0 = var1;
- this.this$0 = var1;
- this.stack = new Stack();
- }
-
- public XSLTEngineImpl$StackGuard(XSLTEngineImpl var1, Node var2, Node var3) {
- this.this$0 = var1;
- this.this$0 = var1;
- this.stack = new Stack();
- this.m_xslRule = var2;
- this.m_sourceXML = var3;
- }
-
- public boolean equals(Object var1) {
- return ((XSLTEngineImpl$StackGuard)var1).m_xslRule.equals(this.m_xslRule) && ((XSLTEngineImpl$StackGuard)var1).m_sourceXML.equals(this.m_sourceXML);
- }
-
- public void print(PrintWriter var1) {
- if (this.m_sourceXML instanceof Text) {
- Text var3 = (Text)this.m_sourceXML;
- var1.println(var3.getData());
- } else {
- if (this.m_sourceXML instanceof Element) {
- Element var2 = (Element)this.m_sourceXML;
- var1.println(var2.getNodeName());
- }
-
- }
- }
-
- public void checkForInfinateLoop(XSLTEngineImpl$StackGuard var1) {
- int var2 = this.stack.size();
- int var3 = 0;
-
- for(int var4 = var2 - 1; var4 >= 0; --var4) {
- if (this.stack.elementAt(var4).equals(var1)) {
- ++var3;
- }
-
- if (var3 >= XSLTEngineImpl.m_recursionLimit) {
- StringWriter var5 = new StringWriter();
- PrintWriter var6 = new PrintWriter(var5);
- var6.println("Infinite loop diagnosed! Stack trace:");
-
- int var7;
- for(var7 = 0; var7 < var2; ++var7) {
- var6.println("Source Elem #" + var7 + " ");
- XSLTEngineImpl$StackGuard var8 = (XSLTEngineImpl$StackGuard)this.stack.elementAt(var4);
- var8.print(var6);
- }
-
- var6.println("Source Elem #" + var7 + " ");
- var1.print(var6);
- var6.println("End of infinite loop diagnosis.");
- this.this$0.diag(var5.getBuffer().toString());
- throw new XSLTEngineImpl.XSLInfiniteLoopException(this.this$0);
- }
- }
-
- }
-
- public void push(Node var1, Node var2) {
- XSLTEngineImpl$StackGuard var3 = new XSLTEngineImpl$StackGuard(this.this$0, var1, var2);
- this.checkForInfinateLoop(var3);
- this.stack.push(var3);
- }
-
- public void pop() {
- this.stack.pop();
- }
- }
-